package com.ecarx.camera.constant;

import android.os.Environment;

import androidx.annotation.IntDef;
import androidx.annotation.StringDef;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.text.SimpleDateFormat;

public interface Constants {

    /**
     * FIXME: 使用back_Camera2接口摄像头替换Dvr（正式发布Dvr功能时，需要赋值为false）
     */
    boolean USE_BACK_CAMERA2_TO_REPLACE_DVR = false;
    /**
     * FIXME: 使用Dvr的Debug实现（正式发布Dvr功能时，需要赋值为false）
     */
    boolean USE_DVR_DEBUG_IMPL = false;

    /**
     * FIXME：CameraView是否显示verbose日志（正式发布时，需要赋值为false）
     */
    boolean CAMERA_VIEW_VERBOSE_LOG = true;

    /**
     * 无效的相册Id
     */
    int INVALID_GALLERY_ID = -1;

    /**
     * 相册数据没回收的值
     */
    int GALLERY_NOT_TRASHED_VALUE = 0;

    /**
     * 无效index值
     */
    int INVALID_INDEX = -1;
    /**
     * 无效值
     */
    int INVALID_VALUE = -110;

    /**
     * 无效字符串
     */
    String INVALID_STR_VALUE = "INVALID";

    /**
     * 默认时间格式化
     */
    SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyyMMdd_HHmmss_SSS");

    /**
     * 默认拍照或录像的存储路径
     */
    String RELATIVE_PATH = Environment.DIRECTORY_DCIM + "/Camera/";
    /**
     * 照片后缀
     */
    String PHOTO_EXTENSION = ".jpg";
    /**
     * 视频后缀
     */
    String VIDEO_EXTENSION = ".mp4";

    /**
     * 快动画的毫秒值
     */
    long ANIMATION_FAST_MILLIS = 50L;
    /**
     * 慢动画的毫秒值
     */
    long ANIMATION_SLOW_MILLIS = 100L;

    /**
     * 最小缩放等级
     */
    float MIN_ZOOM_RATIO = 1f;
    /**
     * 最大缩放等级
     */
    float MAX_ZOOM_RATIO = 2f;

    /**
     * 延迟拍照的延迟时间：3秒
     */
    long PHOTO_TIMER_COUNTDOWN_3S = 3L;
    /**
     * 延迟拍照的延迟时间：5秒
     */
    long PHOTO_TIMER_COUNTDOWN_5S = 5L;

    /**
     * 延迟录像的延迟时间，单位：秒
     */
    long VIDEO_TIMER_COUNTDOWN = 3L;

    /**
     * 一般循环录像默认时长
     */
    @LoopRecordDuration int DEFAULT_LOOP_RECORD_DURATION = LoopRecordDuration.DURATION_3_MIN;
    /**
     * 一般循环录像时长
     */
    @Target({ElementType.FIELD, ElementType.PARAMETER})
    @Retention(RetentionPolicy.SOURCE)
    @IntDef({
            LoopRecordDuration.DURATION_1_MIN,
            LoopRecordDuration.DURATION_3_MIN,
            LoopRecordDuration.DURATION_5_MIN
    })
    @interface LoopRecordDuration {
        /**
         * 一般循环录像时长：1分钟
         */
        int DURATION_1_MIN = 1;
        /**
         * 一般循环录像时长：3分钟
         */
        int DURATION_3_MIN = 3;
        /**
         * 一般循环录像时长：5分钟
         */
        int DURATION_5_MIN = 5;
    }

    /**
     * 一般循环录像默认分辨率
     */
    @LoopRecordResolution int DEFAULT_LOOP_RECORD_RESOLUTION = LoopRecordResolution.RESOLUTION_480P;
    /**
     * 一般循环录像的分辨率
     */
    @Target({ElementType.FIELD, ElementType.PARAMETER})
    @Retention(RetentionPolicy.SOURCE)
    @IntDef({
            LoopRecordResolution.RESOLUTION_480P,
            LoopRecordResolution.RESOLUTION_720P,
            LoopRecordResolution.RESOLUTION_1080P
    })
    @interface LoopRecordResolution {
        /**
         * 一般循环录像分辨率：480p
         */
        int RESOLUTION_480P = 480;
        /**
         * 一般循环录像分辨率：720p 30fps
         */
        int RESOLUTION_720P = 720;
        /**
         * 一般循环录像分辨率：1080p, 30fps
         */
        int RESOLUTION_1080P = 1080;
    }

    /**
     * 选择框类型
     */
    @Target({ElementType.FIELD, ElementType.PARAMETER})
    @Retention(RetentionPolicy.SOURCE)
    @StringDef({
            SelectionType.SINGLE,
            SelectionType.MULTIPLE,
    })
    @interface SelectionType {
        /**
         * 单选框
         */
        String SINGLE = "single";
        /**
         * 多选框
         */
        String MULTIPLE = "multiple";
    }

    /**
     * 摄像头朝向
     */
    @Target({ElementType.FIELD, ElementType.PARAMETER})
    @Retention(RetentionPolicy.SOURCE)
    @IntDef({
            FacingType.EXTERIOR,
            FacingType.INTERIOR,
    })
    @interface FacingType {
        /**
         * 对车外摄像头
         */
        int EXTERIOR = 0;
        /**
         * 对车内摄像头
         */
        int INTERIOR = 1;
    }

    /**
     * Dvr录像类型
     */
    @Target({ElementType.FIELD, ElementType.PARAMETER})
    @Retention(RetentionPolicy.SOURCE)
    @IntDef({
            DvrRecordingType.GENERAL,
            DvrRecordingType.EMERGENCY
    })
    @interface DvrRecordingType {
        /**
         * 一般循环录像
         */
        int GENERAL = 0;
        /**
         * 紧急录像
         */
        int EMERGENCY = 1;
    }
}
